package com.lx.oms.common.utils.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelsUtils {

	// 总行数
	private static int totalRows = 0;
	// 总条数
	private static int totalCells = 0;
	// 错误信息接收器
	private static String errorMsg;

	// 构造方法
	public ExcelsUtils() {
	}

	// 获取总行数
	public int getTotalRows() {
		return totalRows;
	}

	// 获取总列数
	public static int getTotalCells() {
		return totalCells;
	}

	// 获取错误信息
	public String getErrorInfo() {
		return errorMsg;
	}

	/**
	 * 验证EXCEL文件
	 * 
	 * @param filePath
	 * @return
	 */
	public static boolean validateExcel(String filePath) {

		/** 检查文件名是否为空或者是否是Excel格式的文件 */
		if (filePath == null || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath))) {

			errorMsg = "文件名不是excel格式";

			return false;

		}

		/** 检查文件是否存在 */
		File file = new File(filePath);

//		if (file == null || !file.exists()) {
//
//			errorMsg = "文件不存在";
//
//			return false;
//
//		}
		return true;
	}

	/**
	 * 根据文件名读取excel文件 
	 * @author houzhong 
	 * @date 2017年9月25日 上午11:05:00 
	 * @param filePath
	 * @return
	 */
	public static List<List<String>> readFile(String filePath) {

		List<List<String>> dataLst = new ArrayList<List<String>>();

		InputStream is = null;

		try {

			/** 验证文件是否合法 */
			if (!validateExcel(filePath)) {

				System.out.println(errorMsg);
				return null;
			}

			/** 判断文件的类型，是2003还是2007 */
			boolean isExcel2003 = true;

			if (WDWUtil.isExcel2007(filePath)) {

				isExcel2003 = false;

			}

			/** 调用本类提供的根据流读取的方法 */
			File file = new File(filePath);

			is = new FileInputStream(file);

			dataLst = inputReadFile(is, isExcel2003);

			is.close();

		} catch (Exception ex) {

			ex.printStackTrace();

		} finally {

			if (is != null) {

				try {

					is.close();

				} catch (IOException e) {

					is = null;

					e.printStackTrace();

				}
			}
		}

		/** 返回最后读取的结果 */
		return dataLst;
	}

	/**
	 * 根据流读取Excel文件
	 * @author houzhong 
	 * @date 2017年9月25日 上午11:05:52 
	 * @param inputStream 
	 * @param isExcel2003
	 * @return
	 */
	public static List<List<String>> inputReadFile(InputStream inputStream, boolean isExcel2003) {

		List<List<String>> dataLst = null;

		try {

			/** 根据版本选择创建Workbook的方式 */
			Workbook wb = null;

			if (isExcel2003) {
				wb = new HSSFWorkbook(inputStream);
			} else {
				wb = new XSSFWorkbook(inputStream);
			}
			dataLst = readDate(wb);

		} catch (IOException e) {

			e.printStackTrace();

		}

		return dataLst;

	}

	/**
	 * 读取数据
	 * @author houzhong 
	 * @date 2017年9月25日 上午11:06:16 
	 * @param wb
	 * @return
	 */
	private static List<List<String>> readDate(Workbook wb) {

		List<List<String>> dataLst = new ArrayList<List<String>>();

		Sheet sheet = wb.getSheetAt(0);     //获得第一个表单  
		
		
		/** 得到Excel的行数 */
		totalRows = sheet.getPhysicalNumberOfRows();
		
		/** 得到Excel的列数 */
		if (totalRows >= 1 && sheet.getRow(0) != null) {
			totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
		}

		/** 循环Excel的行 */
		for (int r = 0; r < totalRows; r++) {
			Row row = sheet.getRow(r);
			if (row == null) {
				continue;
			}

			List<String> rowLst = new ArrayList<String>();

			/** 循环Excel的列 */
			for (int c = 0; c < getTotalCells(); c++) {

				Cell cell = row.getCell(c);

				String cellValue = "";

				if (null != cell) {
					// 以下是判断数据的类型
					switch (cell.getCellType()) {
					case HSSFCell.CELL_TYPE_NUMERIC: // 数字
						cellValue = cell.getNumericCellValue() + "";
						break;

					case HSSFCell.CELL_TYPE_STRING: // 字符串
						cellValue = cell.getStringCellValue();
						break;

					case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
						cellValue = cell.getBooleanCellValue() + "";
						break;

					case HSSFCell.CELL_TYPE_FORMULA: // 公式
						cellValue = cell.getCellFormula() + "";
						break;

					case HSSFCell.CELL_TYPE_BLANK: // 空值
						cellValue = "";
						break;

					case HSSFCell.CELL_TYPE_ERROR: // 故障
						cellValue = "非法字符";
						break;

					default:
						cellValue = "未知类型";
						break;
					}
				}

				rowLst.add(cellValue);

			}

			/** 保存第r行的第c列 */
			dataLst.add(rowLst);

		}

		return dataLst;
	}
	
	public static void main(String[] args) throws Exception {
		/*
		List<String> list = poi.readXls("E:/123.xlsx");
		
		for (String name : list) {
			System.out.println(name);
		
		}*/
		
		Integer num = 0;
		//Double pirce = (double) 0;
		String name = "";
		List<List<String>> list = ExcelsUtils.readFile("/Users/houzhong/Downloads/test.xlsx");

		if (list != null) {

			for (int i = 0; i < list.size(); i++) {
				if (i == 0) {
					continue;
				}
				
				num += i;
				
				System.out.println("****" + list.size());
				//[[厂家（标题）, 日期, 地域, 一级类目 , 二级类目 , 三级类目, 当日价格, 内容, 作者, 来源], 
				//[测试倒入数据1, 43282.0, 上海, , A201, , 3000.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上], [测试倒入数据22, 43283.0, 上海, , A201, , 3000.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上], [测试倒入数据33, 43284.0, 上海, , A201, , 3000.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上], [测试倒入数444, 43285.0, 上海, , A02, , 3001.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上], [测试倒入数据55, 43286.0, 上海, , A02, , 3002.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上], [测试倒入数据666, 43286.0, 上海, , A02, , 3003.0, 近段时间就多看对方看到尽快抖擞精神风景, 测试机, 网上]]
				List<String> cellList = list.get(i);
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String time = cellList.get(1)+ " 00:00:00";
		        Date date = df.parse(time);

				System.out.println(date);

				/*for (int j = 0; j < cellList.size(); j++) {
					
					if (i == 0) {
						break;
					}

					//System.out.print(" 第" + (j + 1) + "列值：");

					//System.out.print("    " + cellList.get(j));
					
					pirce += Double.parseDouble(cellList.get(3));
				}*/
			}

		}
		
		String str = (list.size() - 1) + "," + name;
		
		System.out.println("----------------" + str);

	}

}
